package org.fing.edu.uy.esbadp.core.entity;

import java.io.Serializable;

/**
 * 
 * @author dev
 *
 * Representa un servicio Virtual definido en la aplicacion.
 */
public class DMRegisteredService implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private long serviceID;
	private String endPointURL;
	private String virtualServiceName;
	private String virtualServiceCategory;
	private String esbProyectName;
	private MetaDataConfig metadata;
	private boolean canonicalXSL;
	
	
	public DMRegisteredService(){
		metadata = new MetaDataConfig();
	}
	
	public long getServiceID() {
		return serviceID;
	}
	public void setServiceID(long serviceID) {
		this.serviceID = serviceID;
	}
	public String getEndPointURL() {
		return endPointURL;
	}
	public void setEndPointURL(String endPointURL) {
		this.endPointURL = endPointURL;
	}
	public String getVirtualServiceName() {
		return virtualServiceName;
	}
	public void setVirtualServiceName(String virtualServiceName) {
		this.virtualServiceName = virtualServiceName;
	}
	public String getVirtualServiceCategory() {
		return virtualServiceCategory;
	}
	public void setVirtualServiceCategory(String virtualServiceCategory) {
		this.virtualServiceCategory = virtualServiceCategory;
	}
	
	public String getEsbProyectName() {
		return esbProyectName;
	}

	public void setEsbProyectName(String esbProyectName) {
		this.esbProyectName = esbProyectName;
	}

				
	public MetaDataConfig getMetadata() {
		return metadata;
	}

	public void setMetadata(MetaDataConfig metadata) {
		this.metadata = metadata;
	}
	
	
	public boolean isCanonicalXSL() {
		return canonicalXSL;
	}

	public void setCanonicalXSL(boolean canonicalXSL) {
		this.canonicalXSL = canonicalXSL;
	}

	/**
	 * 
	 * @param key identificador de la nueva metadata a agregar
	 * @param value valor de la nueva metadata a agregar
	 */
	public void addMetadata(String key , String value){
		this.metadata.setAttribute(key, value);	
	}
	
	/**
	 * 
	 * @param key identificador de la metadata
	 * @return retorna el String de la metada , en caso de no existir retornara el string vacio;
	 */
	public String getMetadata(String key){
		return this.metadata.getAttribute(key, "");
	}
	
	/**
	 * 
	 * @param key identificador de la metadata
	 * @param defValue valor por defecto para la metadata
	 * @return retorna el String de la metada , en caso de no existir retornara el valor por defecto
	 */
	public String getMetadata(String key, String defValue){
		return this.metadata.getAttribute(key, defValue);
	}
	
	
	/**
	 * 
	 * @param key identificador de la metadata
	 * @return retorna true si la metada esta definida en el hash de metadata para el servicio
	 */
	public boolean containsMetadata(String key){
		return this.metadata.containsAttribute(key);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (serviceID ^ (serviceID >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DMRegisteredService other = (DMRegisteredService) obj;
		if (serviceID != other.serviceID)
			return false;
		return true;
	}
	
}
